package com.mf.all.utils;

/**
 * @Author: lmf
 * @Create: 2025/4/4 20:16
 * @module id 生成器
 */
public class UtilIdGenerator {
    /**
     * 生成ID
     *
     * @param prefix 前缀
     * @param zeroPaddingLength 零填充长度
     * @param currentId 当前ID的数值部分
     * @return 生成的ID
     */
    public static String generateId(String prefix, int zeroPaddingLength, int currentId) {
        String numericPart = String.format("%0" + zeroPaddingLength + "d", currentId);
        return prefix + numericPart;
    }

    /**
     * 递增ID
     *
     * @param currentId 当前ID
     * @return 递增后的ID
     */
    public static String incrementId(String currentId) {
        if (currentId == null || currentId.isEmpty()) {
            throw new IllegalArgumentException("当前ID不能为空");
        }

        // 提取前缀和数值部分
        String prefix = extractPrefix(currentId);
        int numericPart = extractNumericPart(currentId);

        // 递增数值部分
        numericPart++;

        // 生成新的ID
        return generateId(prefix, getZeroPaddingLength(currentId), numericPart);
    }

    /**
     * 提取前缀
     *
     * @param id ID
     * @return 前缀
     */
    private static String extractPrefix(String id) {
        for (int i = 0; i < id.length(); i++) {
            if (Character.isDigit(id.charAt(i))) {
                return id.substring(0, i);
            }
        }
        throw new IllegalArgumentException("ID中没有找到数值部分");
    }

    /**
     * 提取数值部分
     *
     * @param id ID
     * @return 数值部分
     */
    private static int extractNumericPart(String id) {
        for (int i = 0; i < id.length(); i++) {
            if (Character.isDigit(id.charAt(i))) {
                return Integer.parseInt(id.substring(i));
            }
        }
        throw new IllegalArgumentException("ID中没有找到数值部分");
    }

    /**
     * 获取零填充长度
     *
     * @param id ID
     * @return 零填充长度
     */
    private static int getZeroPaddingLength(String id) {
        for (int i = 0; i < id.length(); i++) {
            if (Character.isDigit(id.charAt(i))) {
                return id.length() - i;
            }
        }
        throw new IllegalArgumentException("ID中没有找到数值部分");
    }

//    public static void main(String[] args) {
//        // 测试生成ID
//        String id = generateId("job", 6, 1);
//        System.out.println("Generated ID: " + id); // 输出: job000001
//
//        // 测试递增ID
//        String incrementedId = incrementId(id);
//        System.out.println("Incremented ID: " + incrementedId); // 输出: job000002
//    }
}
